home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 1 Issue 2 / PDCD-1 - Issue 02.iso / _utilities / utilities / 001 / infobar / !InfoBar / 0_04 (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-09-26  |  23KB  |  577 lines

  1.  >InfoBar:0_04
  2.  Display time/date/free memory/mode simple readout
  3.  David G Jones, 1994
  4.  This software is PD, do what you will with it.
  5. $; " (Error code "; 
  6. ); ")": 
  7. SReplaceResource% = 
  8.     :
  9.  Whether we create our own smaller ResourceFiler icon
  10.     MStopWelcome%     = 
  11.     :
  12.  Stop Welcome screen on starting up the desktop
  13. 1prog$ = "InfoBar": vers$="0.04 (25 Sep 1994)"
  14.  Start & Finish external coordinates of the various displays. Order of displays is
  15.  important within the rloop section
  16. (DateX0% =  0 * 16: DateX1% =  7 * 16
  17. (TimeX0% =  8 * 16: TimeX1% = 14 * 16
  18. (ModeX0% = 15 * 16: ModeX1% = 18 * 16
  19. (FreeX0% = 19 * 16: FreeX1% = 26 * 16
  20. command$="Desktop_"+prog$
  21. bl$ = 
  22. cr$ = 
  23. nl% = &0A0D
  24. "Service_Reset            = &27
  25. "Service_StartWimp        = &49
  26. "Service_StartedWimp      = &4A
  27. "Service_MemoryMoved      = &4E
  28. "Service_DesktopWelcome   = &7C
  29. assembly
  30.  "OS_File", 10, prog$, &FFA,, code, O%
  31. assembly
  32.  code 16383
  33.  pass% = 4 
  34. O% = code: P% = 0
  35. [ OPT pass%
  36. (!                equd    start
  37.                 equd    0
  38. *!                equd    final
  39. +'                equd    serviceCall
  40. ,'                equd    titleString
  41. -&                equd    helpString
  42. .$                equd    keyWords
  43.                 equd    0
  44.                 equd    0
  45.                 equd    0
  46.                 equd    0
  47. 4-.titleString    equs    prog$ +bl$: align
  48. 5O.helpString     equs    prog$+
  49. (9)+vers$+"   David G Jones"+bl$: align
  50. .keyWords
  51. 80.startUpName    equs    command$ +bl$: align
  52. 9'                equd    startUpComm
  53.                 equd    0
  54. ;'                equd    startUpHelp
  55. <'                equd    startUpHelp
  56. .keyWords_end   equd    0
  57. .startUpHelp    equs "InfoBar displays a row of useful readouts along the top left of the icon bar; Date, time, mode and free memory.": equw nl%
  58. @T                equs "Do not use *"+command$+", use *Desktop instead.": equw nl%
  59. A4                equs    "Syntax: *"+command$+bl$
  60.                 align
  61. D2.serviceCall    teq     r1, #Service_StartWimp
  62. E4                teqNE   r1, #Service_StartedWimp
  63. F.                teqNE   r1, #Service_Reset
  64. G4                teqNE   r1, #Service_MemoryMoved
  65.  StopWelcome%: [OPT pass%: teqNE r1, #Service_DesktopWelcome:]
  66. I#[ OPT pass%:    movNES  pc, r14
  67. K2                teq     r1, #Service_StartWimp
  68. L%                bEQ     startWimp
  69. M4                teq     r1, #Service_StartedWimp
  70. N'                bEQ     startedWimp
  71. O.                teq     r1, #Service_Reset
  72. P(                bEQ     serviceReset
  73. Q4                teq     r1, #Service_MemoryMoved
  74. R(                strEQ   r1, PollWord
  75.  StopWelcome%:[OPT pass%:teq r1, #Service_DesktopWelcome:]:
  76. T"[ OPTpass%:     movEQ   r1, #0
  77. V#                movS    pc, r14
  78. X+.startWimp      ldr     r12, taskHandle
  79. Y#                teq     r12, #0
  80. Z#                mvnEQ   r12, #0
  81. [+                strEQ   r12, taskHandle
  82. \+                adrEQ   r0, startUpName
  83. ]"                movEQ   r1, #0
  84. ^#                movS    pc, r14
  85. `+.startedWimp    ldr     r12, taskHandle
  86. a#                cmn     r12, #1
  87. b#                movEQ   r12, #0
  88. c+                strEQ   r12, taskHandle
  89. d#                movS    pc, r14
  90. f#.serviceReset   mov     r12, #0
  91. g+                str     r12, taskHandle
  92. h#                movS    pc, r14
  93. j..startUpComm    stmfd   r13!, {r0-r2, r14}
  94. k"                mov     r2, r0
  95. l"                mov     r0, #3
  96. m/                swi     "XWimp_ReadSysInfo"
  97. n/                ldmVSfd r13!, {r0 - r2, pc}
  98. o"                teq     r0, #0
  99. p,                adrEQ   r0, notInDesktop
  100. q.                swiEQ   "OS_GenerateError"
  101. r+                adr     r1, titleString
  102. s"                mov     r0, #2
  103. t(                swi     "XOS_Module"
  104. u-                ldmfd   r13!, {r0-r2, pc}
  105. .notInDesktop   equd    0
  106. x>                equs    "Use *Desktop to start "+prog$+bl$
  107.                 align
  108. .taskHandle     equd    0
  109. }'.wimpError     ldr     r1, PollMask
  110. ~O               tst     r1, #1 << 31            ; Are we still in wimp init?
  111. $               movEQ   r1, #%011
  112. $               movNE   r1, #%010
  113. '               adr     r2, TaskName
  114. -               swi     "Wimp_ReportError"
  115. !               teq     r1, #1
  116. #               bEQ     continue
  117. $               b       closeDown
  118. L.NoTemplate    equd 0: equs "Could not find window template" +bl$: align
  119. :.TemplatesFN   equs    "InfoBar:Templates" +bl$: align
  120. 1.Grabkeys      equs    "grabkeys" +bl$: align
  121. 1.TaskName      equs    "Info Bar" +bl$: align
  122. P.Messages      equd    &400c1: equd &400c2: equd &400c3: equd &400c4: equd 0
  123. W.PollMask      equd    %0010000000001100001110000  
  124.  (1 << 31) ;mark not set up yet
  125. .PollWord      equd    0
  126. P.start         mov     r0, #256                       ; Minimum version 3.10
  127. -               add     r0, r0, #310 - 256
  128. #               ldr     r1, TASK
  129. '               adr     r2, TaskName
  130. '               adr     r3, Messages
  131. -               swi     "XWimp_Initialise"
  132. $               bVS     wimpError
  133. )               str     r1, taskHandle
  134. *               adr     r1, TemplatesFN
  135. /               swi     "XWimp_OpenTemplate"
  136. $               bVS     wimpError
  137. *               
  138. adrl("", 1, WimpBlock)
  139. '               add     r2, r1, #128
  140. %               add     r3, r2, #0
  141. !               mvn     r4, #0
  142. '               adr     r5, Grabkeys
  143. !               mov     r6, #0
  144. /               swi     "XWimp_LoadTemplate"
  145. $               bVS     wimpError
  146. !               teq     r6, #0
  147. )               adrEQ   r0, NoTemplate
  148. $               bEQ     wimpError
  149. &               mvn     r2, #&10000
  150. '               str     r2, [r1, #0]
  151. (               add     r2, r2, #&100
  152. '               str     r2, [r1, #8]
  153. /               swi     "XWimp_CreateWindow"
  154. '               strVC   r0, [r1, #0]
  155. 1               swiVC   "XWimp_GetWindowState"
  156. -               swiVC   "XWimp_OpenWindow"
  157. $               bVS     wimpError
  158. '               add     r2, r1, #128
  159. %               add     r3, r2, #0
  160. K               mvn     r4, #0                         ; No font support
  161. *               adr     r5, titleString
  162. Z               mov     r6, #0                         ; First search for template name
  163. /               swi     "XWimp_LoadTemplate"
  164. $               bVS     wimpError
  165. S               teq     r6, #0                         ; Was the template found?
  166. L               adrEQ   r0, NoTemplate                 ; >No  So complain
  167. ;               bEQ     wimpError                      ;
  168. /               swiVC   "XWimp_CreateWindow"
  169. ,               strVC   r0, InfoBarHandle
  170. Q               movVC   r2, r0                         ; r2 == info bar handle
  171. R               mvnVC   r0, #1                         ; icon bar window handle
  172. '               strVC   r0, [r1, #0]
  173. 1               swiVC   "XWimp_GetWindowState"
  174. V               add     r4, r1, #4                     ; r4 => visible area details
  175. W               ldmia   r4, {r5 - r8}                  ; r5 == min x ... r8 == max y
  176. Q               ldrVC   r3, [r1, #28]                  ; r3 == icon bar behind
  177. S               strVC   r2, [r1, #0]                   ; Ok get info bar details
  178. 1               swiVC   "XWimp_GetWindowState"
  179. G               addVC   r7, r5, # FreeX1%              ; r7 == max x
  180. H               mvnVC   r0, #0                         ; Current mode
  181. F               movVC   r1, #5                         ; YEigFactor
  182. 1               swiVC   "XOS_ReadModeVariable"
  183. W               movVC   r0, #1                         ; vertical space around chars
  184. )               movVC   r0, r0, LSL r2
  185. W               addVC   r0, r0, #32                    ; Static height of characters
  186. G               subVC   r6, r8, r0                     ; r6 == min y
  187. V               stmIA   r4, {r5 - r8}                  ; store visible area details
  188. K               subVC   r1, r4, #4                     ; r1 => WimpBlock
  189. O               strVC   r3, [r1, #28]                  ; open above icon bar
  190. -               swiVC   "XWimp_OpenWindow"
  191. $               bVS     wimpError
  192. 0               swi     "XWimp_CloseTemplate"
  193. $               bVS     wimpError
  194.  ReplaceResource% 
  195. [ OPT pass%
  196. )               mov     r0, #&50000000
  197. ,               
  198. adrl("", 1, RomAppsIcon)
  199. -               swi     "XWimp_CreateIcon"
  200. $               bVS     wimpError
  201. [ OPT pass%
  202. '               ldr     r0, PollMask
  203. S               bic     r0, r0, #1 << 31        ;Finished wimp init, so GO Go Go
  204. '               str     r0, PollMask
  205. '.continue      
  206. adrl("", 13, Stack)
  207. $               b       updateAll
  208. ".wimpPoll      mov     r0, #14
  209. (               adr     r1, WimpBlock
  210. !               mov     r2, #3
  211. '               str     r2, [r1, #0]
  212. %               swi     "XOS_Word"
  213. !               mvnVC   r0, #0
  214. %               addVC   r2, r1, #8
  215. =               swiVC   "XTerritory_ConvertTimeToOrdinals"
  216. '               ldrVC   r1, [r2, #4]
  217. &               rsbVC   r1, r1, #60
  218. 2               swiVC   "XOS_ReadMonotonicTime"
  219. $               bVS     wimpError
  220. 8               add     r1, r1, r1, LSL #2   ;(r1 * 5
  221. <               add     r1, r1, r1, LSL #2   ;        * 5
  222. W               add     r2, r0, r1, LSL #2   ;            * 4) + r0 == r1 * 100 + r0
  223. '               ldr     r0, PollMask
  224. (               adr     r1, WimpBlock
  225. '               adr     r3, PollWord
  226. +               swi     "XWimp_PollIdle"
  227. $               bVS     wimpError
  228. !               cmp     r0, #1
  229. L               bLT     updateTime                     ; Null_Reason_Code
  230. /               swiEQ   "XWimp_RedrawWindow"
  231. $               bVS     wimpError
  232.                 bEQ     rloop
  233. H               teq     r0, #17                        ; User_Message
  234. Q               teqNE   r0, #18                        ; User_Message_Recorded
  235. )               bEQ     receiveMessage
  236. N               teq     r0, #13                        ; Poll word non-zero
  237.     #               bEQ     pollWord
  238. G               teq     r0, #8                         ; Key_Pressed
  239. #               bEQ     keypress
  240.  ReplaceResource% 
  241. G[ OPT pass%:   teq     r0, #6                         ; Mouse_Click
  242. )               bEQ     mouseclick  :]
  243. [ OPT pass%
  244. #               b       wimpPoll
  245. X.keypress      ldr     r0, [r1, #24]                  ; r0 == character code pressed
  246. K               teq     r0, #&1DC                      ; Is it Shift-F12
  247. Z               strEQ   r0, PollWord                   ; >Yes Mark infobar to be opened
  248. Q               swi     "XWimp_ProcessKey"             ; Pass on character key
  249. #               bVC     wimpPoll
  250. $               b       wimpError
  251. M.pollWord      ldr     r2, PollWord                   ; r2 == poll reason
  252. !               mov     r3, #0
  253. K               str     r3, PollWord                   ; clear poll word
  254. 3               teq     r2, #Service_MemoryMoved
  255. %               bEQ     updateFree
  256.  W; Icon bar has changed position in window heap so reopen our window infront of ibar
  257. !R               mvn     r0, #1                         ; icon bar window handle
  258. "'               str     r0, [r1, #0]
  259. #1               swi     "XWimp_GetWindowState"
  260. $(               ldrVC   r2, [r1, #28]
  261. %,               ldrVC   r0, InfoBarHandle
  262. &'               strVC   r0, [r1, #0]
  263. '1               swiVC   "XWimp_GetWindowState"
  264. ((               strVC   r2, [r1, #28]
  265. )-               swiVC   "XWimp_OpenWindow"
  266. *#               bVC     wimpPoll
  267. +$               b       wimpError
  268. -'.updateTime    bL      readTimeDate
  269. .T               ldr     r0, Date                       ; Load current date string
  270. /U               ldr     r1, DateOldWord                ; Load previous date string
  271. 0Q               teq     r0, r1                         ; Has the date changed?
  272. 1O               strNE   r0, DateOldWord                ; >Yes Store new date
  273. 2Z               movNE   r2, #DateX0%                   ;      Set min X to Date section
  274. 3Z               movEQ   r2, #TimeX0%                   ; >No  Set min X to Time section
  275. 4'               mov     r4, #TimeX1%
  276. 5'               b       updateWindow
  277. 7&.updateFree    ldr     r7, FreeOld
  278. 8#               bL      readFree
  279. 9&               ldr     r0, FreeOld
  280. :!               teq     r0, r7
  281. ;#               bEQ     wimpPoll
  282. <'               mov     r2, #FreeX0%
  283. ='               mov     r4, #FreeX1%
  284. >'               b       updateWindow
  285. @'.updateAll     bL      readTimeDate
  286. A#               bL      readMode
  287. B#               bL      readFree
  288. C'               mov     r2, #DateX0%
  289. D'               mov     r4, #FreeX1%
  290. E'               b       updateWindow
  291. ; Read both time & date
  292. H(.readTimeDate  adr     r1, WimpBlock
  293. I"               mov     r0, #14
  294. J!               mov     r2, #3
  295. K'               str     r2, [r1, #0]
  296. L%               swi     "XOS_Word"
  297. M$               bVS     wimpError
  298. O1; calculate time from stored 5-byte real time
  299. P(.readTimeDate0 adr     r0, WimpBlock
  300. Q#               adr     r1, Time
  301. R!               mov     r2, #8
  302. S)               adr     r3, TimeFormat
  303. T3               swi     "XOS_ConvertDateAndTime"
  304. U$               bVS     wimpError
  305. V%               sub     r2, r1, r0
  306. WU               ldrB    r1, [r0]                    ; Clear pre-"0" if it is there
  307. X'               teq     r1, # 
  308. ("0")
  309. Y%               subEQ   r2, r2, #1
  310. Z)               str     r2, TimeLength
  311. [(               bNE     readTimeDate1
  312. \'.loop          ldrB    r1, [r0, #1]
  313. ]'               strB    r1, [r0], #1
  314. ^%               subS    r2, r2, #1
  315.                bGT     loop
  316. a1; calculate date from stored 5-byte real time
  317. b(.readTimeDate1 adr     r0, WimpBlock
  318. c#               adr     r1, Date
  319. d!               mov     r2, #8
  320. e)               adr     r3, DateFormat
  321. f3               swi     "XOS_ConvertDateAndTime"
  322. g$               bVS     wimpError
  323. h%               sub     r2, r1, r0
  324. iV               ldrB    r1, [r0]                     ; Clear pre-"0" if it is there
  325. j'               teq     r1, # 
  326. ("0")
  327. k%               subEQ   r2, r2, #1
  328. l)               str     r2, DateLength
  329. m"               movNES  pc, r14
  330. n'.loop          ldrB    r1, [r0, #1]
  331. o'               strB    r1, [r0], #1
  332. p%               subS    r2, r2, #1
  333.                bGT     loop
  334. s"               movS    pc, r14
  335. u!.readMode      mvn     r0, #0
  336. v!               mov     r1, #5
  337. w1               swi     "XOS_ReadModeVariable"
  338. x)               str     r2, YEigFactor
  339. y!               mov     r0, #1
  340. z.               swi     "XWimp_ReadSysInfo"
  341. {#               adrVC   r1, Mode
  342. |!               movVC   r2, #8
  343. }1               swiVC   "XOS_ConvertCardinal1"
  344. ~%               subVC   r1, r1, r0
  345. )               strVC   r1, ModeLength
  346. "               movVCS  pc, r14
  347. $               b       wimpError
  348. !.readFree      mvn     r0, #0
  349. !               mvn     r1, #0
  350. +               swi     "XWimp_SlotSize"
  351. !               movVC   r0, r2
  352. &               strVC   r0, FreeOld
  353. #               adrVC   r1, Free
  354. "               movVC   r2, #12
  355. 0               swiVC   "XOS_ConvertFileSize"
  356. $               bVS     wimpError
  357. !               mov     r2, #0
  358. '.loop          ldrB    r1, [r0], #1
  359. "               cmp     r1, #32
  360. '               bLT     readfree_end
  361. "               cmp     r1, #80
  362. %               addLE   r2, r2, #1
  363.                bLE     loop
  364. ).readfree_end  str     r2, FreeLength
  365. "               movS    pc, r14
  366. .receiveMessage
  367. (               ldr     r2, [r1, #16]
  368. *               sub     r3, r2, #&40000
  369. #               cmp     r3, #&c1
  370. #               bLEQ    readMode
  371. #               bEQ     wimpPoll
  372. #               teq     r3, #&C2
  373. #               teqNE   r3, #&C3
  374. #               teqNE   r3, #&C4
  375. %               bEQ     updateFree
  376. !               teq     r2, #0
  377. #               bNE     wimpPoll
  378. ).closeDown     ldr     r0, taskHandle
  379. #               ldr     r1, TASK
  380. ,               swi     "XWimp_CloseDown"
  381. !               mov     r0, #0
  382. )               str     r0, taskHandle
  383. ,               
  384. adrl("", 3, titleString)
  385. *               swi     "OS_ExitAndDie"
  386. &.final         stmFD   r13!, {r14}
  387. )               ldr     r0, taskHandle
  388. !               teq     r0, #0
  389. #               ldrGT   r1, TASK
  390. ,               swiGT   "XWimp_CloseDown"
  391. !               mov     r1, #0
  392. )               str     r1, taskHandle
  393. %               ldmFD   r13!, {pc}
  394. !.TASK          equs    "TASK"
  395. #.Date          
  396. defineMemory(8)
  397. .DateOldWord   equd    0
  398. .DateLength    equd    0
  399. 0.DateFormat    equs    "%DY %M3" +bl$: align
  400. #.Time          
  401. defineMemory(8)
  402. .TimeLength    equd    0
  403. 0.TimeFormat    equs    "%12:%MI" +bl$: align
  404. #.Mode          
  405. defineMemory(8)
  406. .ModeLength    equd 0
  407. $.Free          
  408. defineMemory(12)
  409. .FreeLength    equd 0
  410. .FreeOld       equd -1
  411. .InfoBarHandle equd    0
  412. &.WimpBlock      
  413. defineMemory(256)
  414. .Stack
  415. .YEigFactor    equd    2
  416. ; r2 = start x ;r4 = end x
  417. (.updateWindow  adr     r1, WimpBlock
  418. ,               ldr     r0, InfoBarHandle
  419. "               mvn     r3, #63
  420. !               mov     r5, #0
  421. ,               stmIA   r1, {r0, r2 - r5}
  422. /               swi     "XWimp_UpdateWindow"
  423. $               bVS     wimpError
  424. !.rloop         teq     r0, #0
  425. #               bEQ     wimpPoll
  426. -.rloop_start   ldr     r8, WimpBlock +  4
  427. -               ldr     r9, WimpBlock + 16
  428. *               ldr     r10, YEigFactor
  429. -               ldr     r1, WimpBlock + 28
  430. -               ldr     r7, WimpBlock + 36
  431. '               cmp     r1, #FreeX0%
  432. !               bGE     rloop4
  433. '               cmp     r1, #ModeX0%
  434. !               bGE     rloop3
  435. '               cmp     r1, #TimeX0%
  436. !               bGE     rloop2
  437. 0               ; Draw out the date component
  438. ,.rloop1        mov     r3, #DateX0%     
  439. 1               mov     r4, #DateX1% - DateX0%
  440. #               adr     r5, Date
  441. )               ldr     r6, DateLength
  442.                bL      draw
  443. '               cmp     r7, #TimeX0%
  444. $               bLT     rloop_end
  445. 0               ; draw out the time component
  446. $.rloop2        mov  r3, #TimeX0%
  447. .               mov  r4, #TimeX1% - TimeX0%
  448.                 adr  r5, Time
  449. &               ldr  r6, TimeLength
  450.                bL   draw
  451. '               cmp     r7, #ModeX0%
  452. $               bLT     rloop_end
  453.                ; Mode
  454. $.rloop3        mov  r3, #ModeX0%
  455. .               mov  r4, #ModeX1% - ModeX0%
  456.                 adr  r5, Mode
  457. &               ldr  r6, ModeLength
  458.                bL   draw
  459. '               cmp     r7, #FreeX0%
  460. $               bLT     rloop_end
  461.                 ; Free memory
  462. $.rloop4        mov  r3, #FreeX0%
  463. .               mov  r4, #FreeX1% - FreeX0%
  464.                 adr  r5, Free
  465. &               ldr  r6, FreeLength
  466.                bL   draw
  467.     (.rloop_end     adr     r1, WimpBlock
  468. /               swi     "XWimp_GetRectangle"
  469. $               bVS     wimpError
  470. !               teq     r0, #0
  471. &               bNE     rloop_start
  472. #               b       wimpPoll
  473. C; r3 - start x; r4 - width; r5 - ptr to string; r6 - string len
  474. !.draw          mov     r0, #2
  475. ,               swi     "XWimp_SetColour"
  476. !               movVC   r0, #4
  477. %               addVC   r1, r8, r3
  478. !               movVC   r2, r9
  479. %               swiVC   "XOS_Plot"
  480. &               movVC   r0, #96 + 1
  481. !               movVC   r1, r4
  482. '               mvnVC   r2, #31 + 16
  483. %               swiVC   "XOS_Plot"
  484. -               subVC   r1, r4, r6, LSL #4
  485. -               addVC   r1, r3, r1, ASR #1
  486. %               addVC   r1, r1, r8
  487. !               movVC   r2, #2
  488. *               movVC   r2, r2, LSL r10
  489.  %               subVC   r2, r9, r2
  490. !!               movVC   r0, #4
  491. "%               swiVC   "XOS_Plot"
  492. #!               movVC   r0, #7
  493. $,               swiVC   "XWimp_SetColour"
  494. %!               movVC   r0, r5
  495. &!               movVC   r1, r6
  496. ''               swiVC   "XOS_WriteN"
  497. ("               movVCS  pc, r14
  498. )$               b       rloop_end
  499.  ReplaceResource% 
  500. [OPT pass%
  501. -D; Replacement ResourceFiler icon (because it is too high on bar)
  502. .'.mouseclick   ldr      r2, [r1, #8]
  503. /$              teq      r2, #%100
  504. 0(              adrEQ    r0, Resources
  505. 1$              swiEQ    "XOS_CLI"
  506. 2$              bVS      wimpError
  507. 3$              teq      r2, #%001
  508. 4)              adrEQ    r0, Resources1
  509. 5$              swiEQ    "XOS_CLI"
  510. 6#              bVC      wimpPoll
  511. 7$              b        wimpError
  512. 9G.Resources    equs     "Filer_OpenDir Resources:$.Apps" +bl$: align
  513. :G.Resources1   equs     "Filer_OpenDir Resources:$"      +bl$: align
  514. .RomAppsIcon  equd     -5
  515. <2              equd 0: equd 0: equd 68: equd 68
  516. =B              equd &1700203A: 
  517. equsPadWithTo("romapps", 0, 12)
  518. [ OPT pass%              
  519.  pass%
  520. defineMemory(A%)
  521. fill(0, A%)
  522. equsPadWithTo(string$, pad%, length%)
  523.  This stores the string$. Ensuring it is pad% terminated, and altogether
  524.  takes length% bytes. (Pads all with pad%)
  525.  short$, temp$
  526. N#short$ = 
  527. string$, length% - 1)
  528. O"[ OPT pass%: equs    short$: ]
  529. P,temp$ = 
  530. fill(pad%, length% - 
  531. (short$))
  532. fill(byte, count)
  533.  This fills in count bytes with the value in byte
  534.  loop
  535.  count <= 0 
  536.  "Assigning zero space here!": =0
  537.  loop = 1 
  538.  count
  539. Z!   [ OPT pass%:  equb byte: ]
  540.  loop
  541. [ OPT pass%: ALIGN: ]
  542. adrl(c$,r%,addr%)
  543.  c%,df%,byte_lo%,byte_hi%,opcode1%,opcode2%
  544.  addr%=P% 
  545.  (pass% 
  546.  12)=0 
  547.  P%+=8:O%+=8:=0
  548. (addr%-P%)<256 
  549. error("ADRL failed: Address within range when setting R"+
  550. r%+" to "+
  551. addr%,-1)
  552. (addr%-P%)>65535 
  553. error("ADRL failed: Address outside range when setting R"+
  554. r%+" to "+
  555. addr%,-1)
  556.  c$=" " 
  557.  c$="" c$="AL"
  558. e.c%=
  559. "EQNECSCCMIPLVSVCHILSGELTGTLEALNV",c$)
  560.  c%=0 
  561. error("ADRL failed: ARM condition code not recognized when setting R"+
  562. r%+" to "+
  563. addr%,-1) 
  564.  c%=(c%-1) 
  565. df%=addr%-P%-8
  566. byte_lo%=
  567. (df%) 
  568. byte_hi%=
  569. (df%) 
  570.  &FF00
  571.  df%>=0 
  572. k3  opcode1%=(c%<<28)+&028F0000+(r%<<12)+byte_lo%
  573. lA  opcode2%=(c%<<28)+&02800C00+(r%<<16)+(r%<<12)+(byte_hi%>>8)
  574. n3  opcode1%=(c%<<28)+&024F0000+(r%<<12)+byte_lo%
  575. oA  opcode2%=(c%<<28)+&02400C00+(r%<<16)+(r%<<12)+(byte_hi%>>8)
  576. q,[OPT pass%:EQUD opcode1%:EQUD opcode2%:]
  577.